SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[spMovimientosMASIVOSALUMNOS]

@Organizacion int,
@AnioLectivo int = null,
@Fecha varchar(10) = null,
@Alumno  int = null,
@Novedad int = null,
@SeccionOrigen int = Null,
@SeccionDestino int = null,
@Previas Varchar (10) = null,
@Carrera int = null,
@EscuelaOrigen  int = Null,
@EscuelaDestino int = Null,
@Observaciones varchar (250) = null,
--AlumnoDivision
@Division int = null,
@Desde Varchar(10) = null,
@hasta Varchar(10) = null,
@PasedeOrigen int = null,
@InscripcionDeOrigen int = null,
@Baja Varchar(1) = null,
@Causabaja int = null,
--finAlumnodivision--
--Inscripciones--
@Curso int  = null,
@Escolarizado Varchar(1) = null,
@Resuelta VarChar(1) = null,
--Fin Inscripcion---
--CarrerasAlumnos--
@AnioIngreso int = null,
@AlumnoRegular varchar(1) = null,
@AnioEgreso int = null,
@Titulo int = null,
@RegistroEgreso Varchar(20) = Null,
--Fin CarrerasAlumnos
--Pases--
@OrganizacionOrigen int = null,
@OrganizacionDestino int = Null,
@Abandono Varchar(1) = null,
@Curso1 int  = null,
@Curso2 int  = null,
--Fin pases--


---Cursadas---
@Espaciocurricular int = null,
@Asignatura int = null,
@Aprobo varchar(1) = null,
@Promedio int =  null,
@Conducta varchar(10) = null,
@Inasistencias int = null,
@Tardanzas int = null,
@Sanciones int = null,
@PorcInasistencias numeric = null,
@Estado varchar(10) = null,
---Fin Cursadas---
-- Parametro para especifica que operacion es A=Alta, B=Baja, M=Modificacion
@ABM int  = 1,
@mensaje int output,
@mess varchar(200) output

AS

SET NOCOUNT ON
SET DATEFORMAT dmy
-- 1 insert Inscripciones
-- 11 Update Inscripciones
-- 2 insert matriculacion
-- 22 update matriculacion
-- 3 Insert Repitencia
-- 33 update Repitencia
-- 4  Insert Promocion
-- 44 Update Promocion
-- 5 insert Abandono
-- 55 Update Abandono
-- 6 Insert Salida con pase
-- 66 Update Salida con pase
-- 7 Insert ingreso con pase
-- 77 update ingreso con pase
-- 8 Insert Reasignacion
-- 88 Upate reasignacion
-- 9 insert Reingreso
-- 99 Update  Reingreso
Declare @idEspacioCurricular int
Declare @idasignatura int
Declare @idcarrera int
Declare @iddivision int
Declare @idCursada int 		
declare @error int
select @mess = 'Verifique los datos, la operación no se realizó'
declare @idalumno int
		select @idalumno = idalumno from tb_alumnos where idalumno = @Alumno
		
		declare @idorganizacion int
		select @idorganizacion = idOrganizaciones from tb_organizaciones where CUISE = @Organizacion
		Begin transaction
if @novedad = 4 and @SeccionOrigen is not null and @SeccionDestino is not null begin
----------Promocion-----------------------------
		if @novedad = 4 and @SeccionOrigen is not null and @SeccionDestino is not null begin
				if not exists (Select * from tb_Alumnodivision where Alumno = @idalumno and Division = @SeccionOrigen ) begin			
			Select @mensaje = 2,@mess = 'El alumno no tiene la Division Seleccionada Asignada'
			goto salir
			end 		

		if exists (Select * from tb_Alumnodivision where Alumno = @idalumno and Division = @SeccionOrigen ) begin			
			Select @curso1=Curso from dbo.tb_divisionestemp where iddivision =  @SeccionOrigen
			
			select  @curso2 = curso from dbo.tb_divisionestemp where iddivision = @SeccionDestino
			
			if  @curso1 <> @curso2 - 1  begin
			Select @mensaje = 2,@mess = 'El alumno no puede ser asignado a la división seleccionada'
			goto salir
			end
			else begin
			UPDATE tb_alumnodivision SET Alumno = Alumno,Division = Division,AnioLectivo = Aniolectivo,Desde = Desde,Hasta=@Fecha,PaseDeOrigen = PaseDeOrigen,InscripcionDeOrigen = InscripcionDeOrigen,Baja = 'S',CausaBaja = 1
			where Alumno = @idalumno and Division = @SeccionOrigen and baja = 'N' and aniolectivo = @AnioLectivo
			select @curso = curso, @carrera = GrupoCarreras from dbo.tb_divisionestemp  where iddivision =@SeccionDestino
			
			--select @SeccionOrigen = @SeccionDestino
			select @curso = curso, @carrera = GrupoCarreras from dbo.tb_divisionestemp  where iddivision =@SeccionDestino
		--declare @idorganizacion int
		--select @idorganizacion = idOrganizaciones from tb_organizaciones where CUISE = @Organizacion
		INSERT INTO tb_alumnodivision(Alumno,Division,AnioLectivo,Desde,Hasta,PaseDeOrigen,InscripcionDeOrigen,Baja,CausaBaja,Cargo,hora)
		VALUES (@idalumno,@SeccionDestino,@AnioLectivo + 1,@Fecha,@Hasta,@PaseDeOrigen,@InscripcionDeOrigen,'N',@CausaBaja,system_user,getdate())
		Select @mensaje = 2,@mess = 'El Alumno promocionado  fue cargado correctamente'
		if exists (Select * from tb_Inscripciones where Alumno = @idalumno and organizacion = @idorganizacion) begin
				UPDATE tb_Inscripciones
				SET Alumno = @idalumno,AnioLectivo = @AnioLectivo,Organizacion = @idorganizacion,Curso = @Curso,Escolarizado = 'S',Resuelta = 'S'
				where Alumno = @idalumno and AnioLectivo = @AnioLectivo and Organizacion = @idorganizacion
				
		
				--INSERT INTO tb_Inscripciones (Organizacion,AnioLectivo,Alumno,Carrera,Curso,Escolarizado,Resuelta)
				--VALUES (@idorganizacion,@AnioLectivo,@idalumno,@Carrera,@Curso,'S','S')
		--		--declare @idInscripcion int 
				--Select @idInscripcion =  @@identity
			
		--		INSERT INTO tb_alumnodivision(Alumno,Division,AnioLectivo,Desde,Hasta,PaseDeOrigen,InscripcionDeOrigen,Baja,CausaBaja,Cargo)
		--		VALUES (@idalumno,@SeccionDestino,@AnioLectivo + 1,@Fecha,@Hasta,@PaseDeOrigen,@InscripcionDeOrigen,'N',@CausaBaja,system_user)
				------------Asignar Asignaturas ----------------------
						
				select @iddivision = iddivision, @curso = curso from dbo.tb_divisionestemp where iddivision = @SeccionDestino
				select @idcarrera = carrera from tb_inscripciones where Alumno = @idalumno and AnioLectivo = @AnioLectivo and organizacion = @idorganizacion
				DECLARE asignaturas CURSOR FOR
				select idEspacioCurricular,idasignatura,idcarrera  from tb_carreras c inner join tb_espacioscurriculares e on c.idcarrera = e.carrera inner join tb_asignaturas a on a.idasignatura = e.asignatura  where e.curso = @curso and e.carrera= @idcarrera
		    		
				OPEN asignaturas
		    
				FETCH NEXT FROM asignaturas into @idEspacioCurricular,@idasignatura,@idcarrera
		     
				WHILE @@FETCH_STATUS = 0
				BEGIN
				
				INSERT INTO tb_Cursadas (Carrera,Curso,AnioLectivo,Espaciocurricular,Asignatura,Aprobo,Promedio,Conducta,Inasistencias,Tardanzas,Sanciones,Alumno,PorcInasistencias,Estado,Division)
				VALUES (@idcarrera,@Curso,2005,@idEspacioCurricular,@idasignatura,'N',@Promedio,@Conducta,0,0,1,@idalumno,@PorcInasistencias,'A',@SeccionDestino)
				
		
				
				FETCH NEXT FROM asignaturas into @idEspacioCurricular,@idasignatura,@idcarrera
				END
				CLOSE asignaturas
				DEALLOCATE asignaturas
				------------Fin Asignar Asignaturas ----------------
		End
			--goto Alumnodivision
				
			Select @mensaje = 2,@mess = 'El Alumno promocionado  fue cargado correctamente'
		
			end 	
		end 		
		Select @mensaje = 2,@mess = 'El Alumno promocionado  fue cargado correctamente'
		goto salir

		end
-----------Fin Promocion----------------------
end 

----------Egreso-----------------------------
if @novedad = 10 and @SeccionOrigen is not null  begin
			if exists (Select * from tb_Alumnodivision where Alumno = @idalumno and Division = @SeccionOrigen ) begin			
			
			Select @curso1=Curso from tb_divisiones where iddivision =  @SeccionOrigen
			
			UPDATE tb_alumnodivision SET Alumno = Alumno,Division = Division,AnioLectivo = Aniolectivo,Desde = Desde,Hasta=@Fecha,PaseDeOrigen = PaseDeOrigen,InscripcionDeOrigen = InscripcionDeOrigen,Baja = 'S',CausaBaja = 5,cargo=system_user
			where Alumno = @idalumno and Division = @SeccionOrigen
			update tb_cursadas set estado = 'C' where Alumno = @idalumno and Division = @SeccionOrigen
			Select @mensaje = 2,@mess =  'El Alumno que Egreso  fue cargado correctamente'
			goto salir
			End
end
-----------Fin Egreso----------------------
-----------Reasignacion-------------------------------
		if @novedad = 8 and @SeccionOrigen is not null and @SeccionDestino is not null and exists((select * from tb_usuarios u inner join tb_relusuariorol ur on u.idusuario = ur.idusuario inner join tb_relpermisosroles pr on pr.idrol = ur.idrol  where ntuser = system_user and pr.idpermiso = 2237 and u.idusuario in (34653656,34653547,34653586,34653867,34653873,34653738,34653874,34653870,34653841,34653849))) begin		
			if not exists (Select * from tb_Alumnodivision where Alumno = @idalumno and Division = @SeccionOrigen ) begin			
			Select @mensaje = 2,@mess = 'El alumno no tiene asignada la Division Seleccionada '
			goto salir
			end 		

		if exists (Select * from tb_Alumnodivision where Alumno = @idalumno and Division = @SeccionOrigen and AnioLectivo = @AnioLectivo ) begin			
			Select @curso1=Curso from tb_divisiones where iddivision =  @SeccionOrigen
			
			select  @curso2 = curso from tb_divisiones where iddivision = @SeccionDestino
			if  @curso1 = @curso2 or @curso2 <> @curso1 begin
			
			UPDATE tb_alumnodivision SET Alumno = @idalumno,Division = Division,AnioLectivo = Aniolectivo,Desde = Desde,Hasta=@Fecha,PaseDeOrigen = PaseDeOrigen,InscripcionDeOrigen = InscripcionDeOrigen,Baja = 'S',CausaBaja = 7,cargo = cargo,hora = hora,previas = @previas
			where Alumno = @idalumno and Division = @SeccionOrigen and baja = 'N' and AnioLectivo =@AnioLectivo
			select @curso = curso, @carrera = GrupoCarreras from tb_divisiones  where iddivision =@SeccionDestino
			
			--select @SeccionOrigen = @SeccionDestino
			select @curso = curso, @carrera = GrupoCarreras from tb_divisiones  where iddivision =@SeccionDestino
		--declare @idorganizacion int
		--select @idorganizacion = idOrganizaciones from tb_organizaciones where CUISE = @Organizacion
			update tb_cursadas set estado = 'C' where Alumno = @idalumno and Division = @SeccionOrigen
		if exists (Select * from tb_Inscripciones where Alumno = @idalumno  and organizacion = @idorganizacion) begin
				UPDATE tb_Inscripciones
				SET Alumno = @idalumno,AnioLectivo = @AnioLectivo,Organizacion = @idorganizacion,Curso = @Curso,Escolarizado = 'S',Resuelta = 'S'
				where Alumno = @idalumno and AnioLectivo = @AnioLectivo and Organizacion = @idorganizacion
				
				
				--INSERT INTO tb_Inscripciones (Organizacion,AnioLectivo,Alumno,Carrera,Curso,Escolarizado,Resuelta)
				--VALUES (@idorganizacion,@AnioLectivo,@idalumno,@Carrera,@Curso,'S','S')
		--		--declare @idInscripcion int 
				--Select @idInscripcion =  @@identity
			
				INSERT INTO tb_alumnodivision(Alumno,Division,AnioLectivo,Desde,Hasta,PaseDeOrigen,InscripcionDeOrigen,Baja,CausaBaja,cargo)
				VALUES (@idalumno,@SeccionDestino,@AnioLectivo,@Fecha,null,@PaseDeOrigen,@InscripcionDeOrigen,'N',Null,system_user)
				------------Asignar Asignaturas ----------------------
						
				select @iddivision = iddivision, @curso = curso from tb_divisiones where iddivision = @SeccionDestino
				select @idcarrera = carrera from tb_inscripciones where Alumno = @idalumno and AnioLectivo = @AnioLectivo and organizacion = @idorganizacion
				DECLARE asignaturas CURSOR FOR
				select idEspacioCurricular,idasignatura,idcarrera  from tb_carreras c inner join tb_espacioscurriculares e on c.idcarrera = e.carrera inner join tb_asignaturas a on a.idasignatura = e.asignatura  where e.curso = @curso and e.carrera= @idcarrera
		    		
				OPEN asignaturas
		    
				FETCH NEXT FROM asignaturas into @idEspacioCurricular,@idasignatura,@idcarrera
		     
				WHILE @@FETCH_STATUS = 0
				BEGIN
				
				INSERT INTO tb_Cursadas (Carrera,Curso,AnioLectivo,Espaciocurricular,Asignatura,Aprobo,Promedio,Conducta,Inasistencias,Tardanzas,Sanciones,Alumno,PorcInasistencias,Estado,Division)
				VALUES (@idcarrera,@Curso,@AnioLectivo,@idEspacioCurricular,@idasignatura,'N',@Promedio,@Conducta,0,0,1,@idalumno,@PorcInasistencias,'A',@SeccionDestino)
				
		
				
				FETCH NEXT FROM asignaturas into @idEspacioCurricular,@idasignatura,@idcarrera
				END
				CLOSE asignaturas
				DEALLOCATE asignaturas
				------------Fin Asignar Asignaturas ----------------
		End
			--goto Alumnodivision
				
			Select @mensaje = 2,@mess = 'El alumno ha sido Reasignado en la division seleccionada correctamente'
			
			end 	
		end 		
		Select @mensaje = 2,@mess = 'El alumno ha sido cargado en la division seleccionada correctamente'

	end 
----------Fin Reasignacion ----------------------



select @mensaje = 1
select @mess

Select @Error = @@ERROR
If @Error <> 0
	GOTO SALIR
salir: select @mess
if @@Error = 0
	COMMIT TRANSACTION
else
	ROLLBACK TRAN
--select @mess as messenger
GO
GRANT EXECUTE ON  [dbo].[spMovimientosMASIVOSALUMNOS] TO [Alumnos]
GRANT EXECUTE ON  [dbo].[spMovimientosMASIVOSALUMNOS] TO [GestionInstitucional]
GO
